/* 
 * CoreException.java
 * 
 * Data de criação: 09/04/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.core.exception;

import br.com.o2solutions.core.exception.enumerator.ExceptionScope;

/**
 * Representa a Generalização das Excecoes lancadas na camada core.
 * 
 * @author osvaldeir
 * @since 09/04/2010
 * 
 */
public abstract class CoreException extends RuntimeException {

	/**
	 * <serialUID>-61690662192208096L</serialUID>
	 */
	private static final long serialVersionUID = -61690662192208096L;

	private String keyMessage;

	private ExceptionScope exceptionScope;

	/**
	 * Construtor que incializa os atributos message e cause
	 * 
	 * @param message
	 * @param cause
	 */
	public CoreException(String message, Throwable cause) {
		super(message, cause);
	}

	/**
	 * Construtor que incializa o atributo message
	 * 
	 * @param message
	 */
	public CoreException(String message) {
		super(message);
		this.setKeyMessage(message);
	}

	/**
	 * Retorna o(a) keyMessage.
	 * 
	 * @return String
	 */
	public String getKeyMessage() {
		return keyMessage;
	}

	/**
	 * Atribui o(a) keyMessage.
	 * 
	 * @param keyMessage
	 *            String
	 */
	public void setKeyMessage(String keyMessage) {
		this.keyMessage = keyMessage;
	}

	/**
	 * Construtor que inicializa os atributos message, cause e keyMessage.
	 * 
	 * @param message
	 *            Mensagem da excecao
	 * @param cause
	 *            Excecao real
	 * @param keyMessage
	 *            Chave para internacionalizacao da excecao
	 */
	public CoreException(String message, Throwable cause, String keyMessage) {
		super(message, cause);
		this.keyMessage = keyMessage;
	}

	/**
	 * Retorna o(a) exceptionScope.
	 * 
	 * @return ExceptionScope
	 */
	public ExceptionScope getExceptionScope() {
		return exceptionScope;
	}

	/**
	 * Atribui o(a) exceptionScope.
	 * 
	 * @param exceptionScope
	 *            ExceptionScope
	 */
	public void setExceptionScope(ExceptionScope exceptionScope) {
		this.exceptionScope = exceptionScope;
	}

	/**
	 * Construtor que inicializa os atributos message, cause, keyMessage e
	 * exception.
	 * 
	 * @param message
	 *            Mensagem da excecao lancada
	 * @param cause
	 *            Causa real
	 * @param keyMessage
	 *            Chavem da mensagem (internacionalizacao)
	 * @param exceptionScope
	 *            Escopo da excecao
	 */
	public CoreException(String message, Throwable cause, String keyMessage,
			ExceptionScope exceptionScope) {
		this(message, cause, keyMessage);
		this.setExceptionScope(exceptionScope);
	}

}
